Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.
Essentials

“Everything Below Loads.” Three Of These Do Not.

Somebody drew the .claude/ folder as a tree — sixteen entries, each with a one-line label, colour-coded. “anatomy of a .claude/ folder. every file. what it does. why it matters.” It is the single most useful kind of card: a map of a thing that is normally invisible until it breaks.

And in the smallest type on the image, under the call to action, the author writes this:

Folder names and features change between versions. Check the official Claude Code docs before you rely on this map.

So we did. Every row, against Anthropic’s own page on the .claude directory, which documents each file with a field for exactly the thing the card is trying to convey: when it loads.

The result is better than we expected. The card is right about the things people usually get wrong — the 200-line guidance on CLAUDE.md is genuinely in the docs, .mcp.json really does belong at the project root and not inside .claude/, glob-scoped rules are real and the card’s example path is almost word for word the docs’ own, and calling commands/ “legacy but live” matches the documentation’s own note.

But one sentence on the card is wrong, and it is the one in the middle, printed next to the folder everything else hangs off.

The source card — “anatomy of a .claude/ folder”, BANI Academy. A sixteen-row tree of the Claude Code project folder, with a one-line description of each entry.

Open the original post on Facebook →

The sentence in the middle

Next to .claude/ the card says:

the brain. everything below loads.

Three rows below that, it lists hooks/ with the label “shell scripts that always fire.” And four rows below that, it lists settings.json with the label “permissions, model, hook registry.”

Both of those cannot be true. If settings.json is the hook registry, then a shell script sitting in hooks/ is not a hook yet. It is a file.

The documentation is unambiguous about this. A hook is a JSON entry in a settings file whose command points at a path — the docs’ own example is ${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh. The .claude/hooks/ directory is a convention for where to keep the scripts, nothing more. It does not appear in the documented .claude/ tree at all, because Claude Code never reads it as a directory. It only ever opens the exact path your settings file names.

The docs even describe the failure: when the path is wrong, the hook silently does not run and you get a non-blocking notice on the first attempt. In their words, “a mistyped path in settings.json means the hook never runs”. A script in the right folder with the wrong line in settings fires exactly as often as a script in no folder at all.

The folder is five mechanisms wearing one icon

Once you stop reading .claude/ as a single thing that loads, the map reorganises itself. Anthropic’s documentation gives every entry a when, and those whens fall into five groups. This is the diagram the card is missing, and it is the one that matters, because the groups differ in the only currency that is actually scarce: how much of your context window they eat before you have typed anything.

# Load moment What lives there Costs you context… How you check
1 Always — read at session start CLAUDE.md, CLAUDE.local.md, rules with no paths:, auto memory MEMORY.md Every session, every token. This is the only tier you pay for unconditionally /context lists them under Memory files
2 On match — when Claude touches a matching file Rules with paths: frontmatter; CLAUDE.md files in subdirectories Only in sessions that touch those files /context after the file is read
3 On pick — you type /name, or Claude chooses it skills/, commands/, agents/, workflows/ Only when invoked. A hundred unused skills cost you a list, not their contents The / menu; /doctor
4 On registration — only if a settings key names it Hook scripts, the status line script, the selected output style Nothing. These run outside the model entirely /hooks, and the bottom bar itself
5 Never into context — enforced by the program settings.json permissions, .mcp.json server connections Nothing — but they constrain what can happen whether Claude agrees or not /mcp, permission prompts
Five load moments, taken from the when field Anthropic documents for each entry. Tier 1 is the only one with a standing cost — which is the real reason the 200-line guidance exists.

That last point is worth sitting with, because it explains a rule the card states without a reason. “Keep it under 200 lines” is real guidance — the documentation says that when CLAUDE.md approaches 200 lines you should start splitting it into rules/. But the number is not a style preference. It is tier 1 arithmetic. Everything in CLAUDE.md is paid for at the start of every session, in every repository, forever. Everything moved into a paths:-gated rule is paid for only when it is relevant.

The same arithmetic shows up again in the part of the system the card does not mention at all: auto memory. Anthropic caps it explicitly — the first 200 lines, and no more than 25KB, of MEMORY.md is loaded at session start. Same tier, same bill, same ceiling.

So the design principle behind the whole folder is: push everything you can out of tier 1 and into tiers 2, 3 and 4. That is what rules, skills and hooks are for. A map that flattens them into “everything below loads” hides the one idea that makes the folder make sense.

Row by row, against the documentation

The card has twenty-eight rows. Below are its eighteen structural entries — the files and folders themselves, not the illustrative examples hanging off them — each checked against Anthropic’s published documentation. Most of them pass.

Entry The card says What the docs say Verdict
your-project/ where Claude actually lives Project instructions and settings are read from the session’s primary working directory Right
CLAUDE.md your rules. keep it under 200 lines “When CLAUDE.md approaches 200 lines, start splitting into rules”. Loaded into context at the start of every session Right, and the number is genuinely theirs
CLAUDE.local.md personal overrides. never commit Loads alongside CLAUDE.md and is treated the same way; add it to .gitignore yourself Right. One trap the card misses — see below
.gitignore block *.local.* and your secrets Claude Code adds **/.claude/settings.local.json to your global git excludes the first time it writes that file Right but partly automatic
.mcp.json MCP servers. root only, no nesting “Lives at the project root, not inside .claude/”. Servers connect when the session begins Right
.claude/ the brain. everything below loads Each entry has its own load moment; most do not load at session start Wrong, and it is the load-bearing sentence
skills/ model-invokable. Claude picks them “By default, both you and Claude can invoke a skill.” disable-model-invocation and user-invocable: false change that Half. You invoke them too, with /name
agents/ subagents. own context window “Specialized subagents with their own context window”. Spawned by Claude or @-mentioned by you Right
commands/ slash commands. legacy but live “New commands should usually be skills instead; commands remain supported” Right, almost verbatim
hooks/ shell scripts that always fire Not a documented directory. Hooks are JSON entries in a settings file pointing at a script path Wrong until registered
plugins/ first-class in 2026. /plugin:cmd Plugins install from a marketplace and are recorded in enabledPlugins in a settings file Not a folder you create
claude-finance/ official Anthropic plugin. 6 agents No plugin by that name in Anthropic’s documented marketplaces. See the correction below Name is wrong
rules/ glob-scoped. loads on match “Rules without paths: load at session start. Rules with paths: load when Claude reads, writes, or edits a matching file” Right for gated rules; ungated ones load always
api.md fires only inside src/api/** The docs’ own example rule uses paths: ["src/api/**/*.ts"] Right, near word for word
output-styles/ response shape on tap “Files read at startup; the style you select with outputStyle applies to every response” Right, with a catch: only the selected one applies
statusline bottom-bar. branch, model, tokens A statusLine key in settings points at a script, conventionally ~/.claude/statusline.sh A script, not a loaded file
settings.json permissions, model, hook registry Permissions, hooks, statusLine, model, env, outputStyle Right — and it quietly corrects the hooks/ row
settings.local.json your machine. gitignored Your personal overrides for one project; kept out of git automatically when Claude Code creates it Right
Twelve right, one half-right, three that do nothing without a line elsewhere, one wrong claim and one wrong name. For a card drawn freehand, that is a good score.

The one factual correction

The card lists claude-finance/ under plugins/ and calls it an “official Anthropic plugin” with six agents. We could not find a plugin by that name.

Anthropic’s documentation names three general-purpose marketplaces — claude-plugins-official, claude-community and the demo claude-code-plugins — plus topic-specific ones such as anthropics/skills and anthropics/knowledge-work-plugins. There is a real finance marketplace, but it is called something else: the repository anthropics/financial-services publishes a marketplace named claude-for-financial-services. Reading its catalogue file directly, it lists nineteen plugins, including financial-analysis, investment-banking, equity-research, earnings-reviewer, kyc-screener and valuation-reviewer, plus two vendor connectors.

So the thing exists; the name on the card does not. If you type /plugin install claude-finance you will get Plugin “claude-finance” not found in any marketplace, and you will spend ten minutes assuming you set something up wrong.

Worth adding, because it is the same lesson as the hooks row: installing a plugin and enabling it are separate. The docs are explicit that committing a plugin entry in .claude/settings.json “turns the plugin on for your collaborators but doesn’t download it to their machines”. Presence is not installation, here either.

What the map leaves out

The bigger gap is not an error, it is a boundary. This card maps your project folder. Half of what Claude Code reads lives in your home folder, and none of it is on the map.

Missing from the card Where it lives When it loads Why it matters
workflows/ .claude/ and ~/.claude/ “Loaded at startup; each file becomes a /<name> command” A documented project directory, same tier as skills
agent-memory/ .claude/ and ~/.claude/ First 200 lines (capped at 25KB) of the subagent’s MEMORY.md, loaded when that subagent runs Subagents keep their own memory, separate from yours
Auto memory ~/.claude/projects/<project>/memory/ MEMORY.md loaded at session start; topic files read on demand Tier 1. Costs tokens every session and most people do not know it is there
~/.claude/CLAUDE.md Home folder “Loaded at the start of every session, in every project” Your personal instructions, everywhere, forever
~/.claude/settings.json Home folder Your defaults; project and local settings override individual keys Where most people’s real configuration actually lives
User-level rules/ skills/ commands/ agents/ output-styles/ ~/.claude/ Same rules as the project copies Every folder on the card has a twin you did not see
keybindings.json, themes/ ~/.claude/ Read at session start; keybindings hot-reload on edit Small, but they are part of the anatomy
.worktreeinclude Project root Read when a worktree is created Gitignored files to copy into new worktrees
Eight documented things the map does not show — and one of them, auto memory, sits in the same always-loaded tier as CLAUDE.md.

There is also a trap in the CLAUDE.local.md row that is worth knowing even though the card’s label is correct. Having a CLAUDE.local.md anywhere on the project path stops Claude reading an AGENTS.md by default — the documentation spells out that AGENTS.md is read only when there is no CLAUDE.md or CLAUDE.local.md above your working directory. If you work in a repository that standardises on AGENTS.md and you drop in a personal local file, you have just switched your teammates’ shared instructions off for yourself, silently.

It is the same shape of problem as a CLAUDE.md in the wrong folder: nothing errors, nothing warns, the file is simply never read.

The two lines that turn three of those rows on

If you took the card at its word, built .claude/hooks/format-on-save.sh, made it executable and waited for it to always fire — this is what was missing. Both registrations live in the same file, which is why the card’s settings.json label was the honest one all along.

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format-on-save.sh"
      }]
    }]
  },
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}

Three details that bite. The script has to be executable — chmod +x — or the shell exits with code 127 and you get a non-blocking notice instead of a hook. The matcher decides which tool calls the hook sees. And ${CLAUDE_PROJECT_DIR} is there on purpose: it keeps pointing at the project root the session started in, so the same line works from a subdirectory and inside a worktree.

Stop guessing: four commands that show you what loaded

The real lesson of the card is not any one row. It is that a folder tree cannot tell you whether something loaded, because loading is not a property of where a file sits. Anthropic has a whole page on debugging your configuration for exactly this, and four commands do most of the work.

  • /context — what is actually in the window right now, including the Memory files list. This is how you confirm a CLAUDE.md or an ungated rule loaded.
  • /hooks — which hooks are registered. If yours is not listed, the folder was never the problem.
  • /mcp — which MCP servers connected, as opposed to which ones are written in .mcp.json.
  • /doctor — the broad sweep, including a prompt audit across your CLAUDE.md, rules, skills, commands, subagents and output styles.

Thirty seconds with /context settles an argument that a map cannot.

Four honest caveats

  1. This check has a date on it. Everything above was read from the current Claude Code documentation in October 2026. The card’s own footnote is right: names and features move between versions, and a correct map goes stale without anyone editing it.
  2. This is a documentation check, not a machine test. We compared the card against what Anthropic publishes; we did not sit down and create all twenty-eight entries to watch what happened. Where documented behaviour and actual behaviour disagree, trust the machine and file a bug.
  3. The missing plugin may exist somewhere we did not look. We checked Anthropic’s documented marketplaces and read the claude-for-financial-services catalogue file directly. A third-party marketplace could publish something called claude-finance; it would not be an official Anthropic plugin.
  4. The example names are examples. ui-ux-pro-max, remotion, code-reviewer.md and the rest are the author’s illustrations of what you might put in those folders. We did not verify them and the card does not claim they are official. Only claude-finance was labelled official, which is why it was the one worth checking.

The one-line version

A .claude/ folder is not a brain and nothing “below” it simply loads. It is five different loading mechanisms sharing one folder icon, and the only tier that costs you anything before you type is the small one at the top. Learn which row is in which tier and the 200-line rule, the rules/ folder and the entire design of the thing stop looking like trivia and start looking like one idea.

If this is the file-system half of getting more out of Claude, the conversation half is here — four named knobs and how to tell which one to turn. On the folder side, we have also written about which commands produce output and which one checks it, and about the difference between a map and a bag — which is, in the end, what this card was trying to be.

Do this one thing. Open a project, run /context, and read the Memory files list. Anything on it is costing you tokens in every session from now until you move it into a paths:-gated rule.

The original card on Facebook →

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button